package com.cheboohui.iqs.taiping.direct;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.jdom.Element;

import com.alibaba.fastjson.JSONObject;
import com.cheboohui.iqs.common.basic.StringUtil;
import com.cheboohui.iqs.menu.ErrorNews;

/**
 * 直连接口共有类
 * 
 * @author xielonghai
 *
 */
public class DirectTp {
	/**
	 * logger:日志工具.
	 */
	private static Log log = LogFactory.getLog(DirectTp.class);

	/**
	 * 太平直连接口请求以及处理<公共方法>
	 * 
	 * @param value
	 *            接口描述
	 * @param request
	 *            请求xml
	 * @param key
	 *            返回xml获取key
	 * @return
	 */
	public static ResTaiPing request(String value, String url, String request, String[] key) {
		log.info("进入-->" + value);
		String response = TPPost.postTP(url, request);

		log.info(value + ",请求 返回信息:" + response);

		if (StringUtil.isNulls(response)) {
			log.error(value + "--HTTP请求出错,返回null");
			return new ResTaiPing(ErrorNews.L01, value + "-HTTP请求出错,返回null");
		} else {
			return responseDeal(value, response, key);
		}
	}

	/**
	 * 返回报文处理
	 * 
	 * @param response
	 *            返回报文
	 * @return
	 */
	private static ResTaiPing responseDeal(String value, String response, String[] key) {
		log.info(value + "--处理返回报文开始！");
		/** xml解析 **/
		Element el = XMLTool.toElement(response);
		/** head---请求返回报文判断 **/
		ResTaiPing deal = XMLTool.responsejudge(el);
		log.info(value + "-处理请求返回数据---判断返回数据<head>结果:" + JSONObject.toJSONString(deal));
		if (!deal.isState()) {
			return deal;
		}

		/** 提取数据 **/
		ResTaiPing res = XMLTool.responseBody(el, key);
		res.setHead(deal.getResult());
		log.info(value + "-处理请求返回数据---提取返回数据<body>结果:" + JSONObject.toJSONString(res));
		return res;
	}
}
